In order to implement a circuit design within an integrated circuit (IC) such as a programmable IC or an application specific integrated circuit (ASIC), the circuit design undergoes processes including synthesis, mapping, placement, and routing. Synthesis refers to the process of converting, or translating, an abstract, programmatic description of a circuit specified in a hardware description language (HDL) into a low-level design implementation. The abstract, programmatic description of the circuit describes the behavior of the circuit and is also referred to as a “behavioral description” or a “register transfer level (RTL) description” of the circuit. The low level design implementation generated through synthesis typically is specified as inter-connected logic gates.
Once synthesized, the resulting low-level circuit implementation is mapped. Mapping is the process of correlating, or matching, the logic gates of the low-level circuit design to the various types of circuit blocks or resources that are actually available in the particular IC in which the circuit design is to be implemented, i.e., the “target IC.” For example, since a lookup table (LUT) may implement a complex function, one or more logic gates of the low level design implementation may be mapped to a single LUT, or other programmable tile of the target IC. The mapped circuit design specifies the same functionality as the low level design implementation, albeit in terms of the particular circuit blocks available on the target IC as opposed to low-level logic gates.
Placement is the process of assigning elements of the mapped circuit design to particular instances of circuit blocks and/or resources having specific locations on the target IC. Once placed, an element of the circuit design has a specific location on the target IC as opposed to only being assigned to a particular type of circuit block and/or resource as is the case after mapping and prior to placement. The location of the instance of the circuit block and/or resource on the target IC assigned to an element of the circuit design is the location of that element when placed. Routing is the process of selecting particular routing resources to electrically couple the various circuit blocks of the target IC. In a programmable IC, the routing resources may include wires, programmable interconnection points (PIPs) and/or other interconnect circuitry.
Circuit designs may be evaluated against requirements set forth in a design specification after various stages of the design flow described above. Estimates of circuit design performance relating to timing, power consumption, or the like, may be compared with the requirements of the design specification to determine whether the requirements are met. Aggressive timing requirements pose challenges for implementing circuit designs, whether on programmable ICs or on ASICs. For some circuit designs, tools for implementing the circuit design may require lengthy computation times to determine a feasible placement and satisfy timing requirements, as a programmable IC has a finite number of logic and interconnect resources, and an ASIC has a limited amount of die area on which to implement a circuit design. The computation time increases over time as both design complexity and design reuse increase due to need for higher designer productivity. This results in a need to design both better ICs and design optimization algorithms. Examples of programmable ICs include field programmable gate arrays (FPGAs) and systems on chip (SOCs) having a combination of hardwired processors, programmable logic, and memory.